package com.yehebl.orm.config;

import com.yehebl.orm.enums.*;
import org.springframework.jdbc.core.JdbcTemplate;

import com.yehebl.orm.data.common.IDao;
import com.yehebl.orm.data.common.IJdbc;

/**
 * 框架加载配置	
 * @author tzd
 */
public interface IConfig {
	
	/**
	 * 设置最底层jdbc
	 */
	void setJdbc(IJdbc jdbc);
	
	/**
	 * 设置最底层jdbc,不初始化，Ds框架
	 */
	void setJdbcNoInit(IJdbc jdbc);

	/**
	 * class 名 对应 表名规则
	 * @param clazz 实体类
	 * @return 表名
	 */
	String classToTableRule(Class<?> clazz);
	
	/**
	 * 实体类字段名对应数据库列名规则
	 * @param clazz 实体类
	 * @param fieldName 字段名
	 * @return 表列名
	 */
	String fieldToColumnRule(Class<?> clazz, String fieldName);
	
	/**
	 * 设置扫描的包
	 */
	String getScanPackage();
	
	/**
	 * 设置扫描xml的文件夹
	 */
	String getScanXml();
	
	
	
	
	/**
	 * 日志SQL输出,ALL,SQL,ALL_FORMAT,SQL_FORMAT,NONE ALL:代表SQL+参数 SQL:代表SQL
	 * ALL_FORMAT:SQL+参数，格式化打印 SQL_FORMAT：SQL，格式化打印， 不打印参数 默认NONE
	 */
	SqlLogMode getSqlLogMode();
	
	/**
	 * 根据RunMode 状态选择SqlLog模式
	 */
	SqlLogMode getSqlLogModeByRunMode();
	
	/**
	 * debug 模式下
	 * 日志SQL输出,ALL,SQL,ALL_FORMAT,SQL_FORMAT,NONE ALL:代表SQL+参数 SQL:代表SQL
	 * ALL_FORMAT:SQL+参数，格式化打印 SQL_FORMAT：SQL，格式化打印， 不打印参数 默认ALL_FORMAT
	 */
	SqlLogMode getDebugSqlLogMode();
	
	/**
	 * 获取运行模式
	 */
	RunMode getRunMode();
	
	/**
	 * 数据库类型
	 */
	DataType getDataType();
	
	/**
	 * 打印sql
	 */
	void printSql(String sql);
	
	
	/**
	 * 生成id
	 */
	Object getAutoId(IdType idType);
	
	
	/**
	 * 默认的id生成类型
	 */
	IdType getDefaultIdType();
	
	
	
	/**
	 * 获取dao
	 */
	IDao getDao();
	
	/**
	 * 最底层jdbc操作,如果使用系统自带jdbc则不管理事务
	 */
	IJdbc getJdbc();
	
	
	/**
	 * 设置 jdbcTemplate 
	 */
	void setJdbcTemplate(JdbcTemplate jdbcTemplate);


	/**
	 * 获取雪花id
	 * @return
	 */
    long getSnowflakeId();


	/**
	 * 通过规则获取 新的表名
	 */
	String getTableRuleName(TableNameRule tableNameRule,String tableName);
}
